/*
 * @Author: tianz 
 * @Date: 2018-11-15 19:54:51 
 * @Last Modified by: tianz
 * @Last Modified time: 2018-11-16 12:42:42
 * 
 * @Description: WebServer类声明
 */


#ifndef WEB_SERVER_H
#define WEB_SERVER_H

#include <cpprest/uri.h>
#include <cpprest/http_listener.h>
#include <cpprest/http_client.h>
#include <cpprest/asyncrt_utils.h>
#include <cpprest/filestream.h>
#include <cpprest/json.h>

namespace PTLR{

class WebServer
{
public:
    /**
     * @brief 构造函数
     * 
     * @param url Api的调用url
     */
    WebServer(std::string url);

    /**
     * @brief 析构函数
     */
    ~WebServer();

    /**
     * @brief 开启web server 
     */
    pplx::task<void> open();

    /**
     * @brief 关闭web server 
     */
    pplx::task<void> close();

private:

    /**
     * @brief 处理GET请求的函数
     * 
     * @param message HTTP请求内容
     */
    void handle_get(web::http::http_request message);

    /**
     * @brief 处理POST请求的函数
     * 
     * @param message HTTP请求内容
     */
    void handle_post(web::http::http_request message);

    /**
     * @brief 处理PUT请求的函数
     * 
     * @param message HTTP请求内容
     */
    void handle_put(web::http::http_request message);

    /**
     * @brief 处理DELETE请求的函数
     * 
     * @param message HTTP请求内容
     */
    void handle_del(web::http::http_request message);

    web::http::experimental::listener::http_listener* m_listener;                       ///< HTTP请求监听类
};

} // namespace PTLR

#endif // WEB_SERVER_H

